package com.example.springfeature.service;

import com.example.springfeature.event.UserRegisterEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
//事件监听器 ApplicationListener：通过实现它，进行指定类型的事件的监听
//事件监听器 由程序员开发，有2中方法
//法1. 实现ApplicationListener接口，并重写onApplicationEvent方法
//法2. 在自定义void方法上加@EventListener，自定义的方法参数必须是XX事件
@Service
public class EmailAction implements ApplicationListener<UserRegisterEvent> {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    @Async  //非关键逻辑的事件建议异步执行，毕竟实际场景下，发送邮件可能比较慢
    public void onApplicationEvent(UserRegisterEvent event) {
        logger.info("[onApplicationEvent][给用户({}) 发送邮件]", event.getUsername());
    }

}